package com.smart.community.property.service;

import com.smart.community.property.entity.RepairProgress;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 维修工单进度记录服务接口
 * 
 * 严格按照《Java后端SpringBoot代码开发规范.md》Entity规范实现：
 * - 功能单一原则：Service层负责业务逻辑处理，Entity层只负责数据库字段映射
 * - 类型一致性：确保与Entity字段类型完全一致，progressType和status使用String类型
 * - 生产环境标准：移除throws Exception声明，使用统一异常处理
 * 
 * @author Wu.Liang
 * @since 2025-01-30
 * @version 2.0.0 - 根据新Entity规范调整
 */
public interface IRepairProgressService {

    /**
     * 保存进度记录
     * @param progress 进度记录
     * @return 是否保存成功
     */
    boolean saveProgress(RepairProgress progress);

    /**
     * 创建工单进度记录
     * @param orderId 工单ID
     * @param orderNo 工单号
     * @param progressType 进度类型
     * @param progressTitle 进度标题
     * @param progressContent 进度内容
     * @param operatorId 操作人ID
     * @param operatorName 操作人姓名
     * @return 是否创建成功
     */
    boolean createProgress(Long orderId, String orderNo, Integer progressType, String progressTitle,
                          String progressContent, Long operatorId, String operatorName);

    /**
     * 创建工单进度记录（包含维修人员信息）
     * @param orderId 工单ID
     * @param orderNo 工单号
     * @param progressType 进度类型
     * @param progressTitle 进度标题
     * @param progressContent 进度内容
     * @param operatorId 操作人ID
     * @param operatorName 操作人姓名
     * @param repairmanId 维修人员ID
     * @param repairmanName 维修人员姓名
     * @param progressTime 进度时间
     * @return 是否创建成功
     */
    boolean createProgressWithRepairman(Long orderId, String orderNo, Integer progressType, String progressTitle,
                                       String progressContent, Long operatorId, String operatorName,
                                       Long repairmanId, String repairmanName, LocalDateTime progressTime);

    /**
     * 根据工单ID查询进度记录列表
     * @param orderId 工单ID
     * @return 进度记录列表
     */
    List<RepairProgress> getProgressListByOrderId(Long orderId);

    /**
     * 根据工单号查询进度记录列表
     * @param orderNo 工单号
     * @return 进度记录列表
     */
    List<RepairProgress> getProgressListByOrderNo(String orderNo);

    /**
     * 获取工单最新的进度记录
     * @param orderId 工单ID
     * @return 最新进度记录
     */
    RepairProgress getLatestProgressByOrderId(Long orderId);

    /**
     * 根据进度类型查询进度记录
     * @param orderId 工单ID
     * @param progressType 进度类型
     * @return 进度记录
     */
    RepairProgress getProgressByOrderIdAndType(Long orderId, Integer progressType);

    /**
     * 删除工单相关的所有进度记录
     * @param orderId 工单ID
     * @return 是否删除成功
     */
    boolean deleteProgressByOrderId(Long orderId);

    /**
     * 统计工单进度数量
     * @param orderId 工单ID
     * @return 进度数量
     */
    int countProgressByOrderId(Long orderId);

    /**
     * 查询指定时间范围内的进度记录
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 进度记录列表
     */
    List<RepairProgress> getProgressListByTimeRange(LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 查询维修人员相关的进度记录
     * @param repairmanId 维修人员ID
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 进度记录列表
     */
    List<RepairProgress> getProgressListByRepairmanId(Long repairmanId, LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 批量创建进度记录
     * @param progressList 进度记录列表
     * @return 是否创建成功
     */
    boolean batchCreateProgress(List<RepairProgress> progressList);

    /**
     * 更新工单最新进度记录的内容
     * @param orderId 工单ID
     * @param progressContent 新的进度内容
     * @return 是否更新成功
     */
    boolean updateProgressContent(Long orderId, String progressContent);
} 